package com.bsth.entity.schedule;

import com.bsth.entity.CarPark;
import com.bsth.entity.Cars;
import com.bsth.entity.Line;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

/**
 * 车辆配置信息。
 */
@Entity
@Table(name = "bsth_c_s_ccinfo")
@NamedEntityGraphs({
        @NamedEntityGraph(name = "carConfigInfo_xl_cl", attributeNodes = {
                @NamedAttributeNode("xl"),
                @NamedAttributeNode("cl")
        })
})
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
public class CarConfigInfo extends BEntity implements Serializable {

    /** 主健Id */
    @Id
    @GeneratedValue
    private Long id;

    /** 线路关联（jpa2 detach）*/
    @ManyToOne(optional = false, cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
    private Line xl;
    /** 车辆关联 (jpa2 detach) */
    @ManyToOne(optional = false, cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
    private Cars cl;


    /** 早班时间（格式：HH:mm） */
    @Column(length = 5)
    private String zbsj;
    /** 末班时间（格式：HH:mm） */
    @Column(length = 5)
    private String mbsj;

    /** 启用日期 */
    @Column(nullable = false)
    private Date qyrq;
    /** 终止日期 */
    private Date zzrq;


    @Column(nullable = false)
    /** 停车点（TODO：这个不知道是否要关联）*/
    private String tcd;

    /** 停车场关联（出场，进场班次会关联停车场） */
    @ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
    private CarPark tcc;

    /** 受否切换 0或者1（TODO：不懂，貌似喝历史配车有关） */
    @Column(nullable = false)
    private int isSwitch;

    /** 是否删除（标记） */
    @Column(nullable = false)
    private Boolean isCancel = false;

    //-------------- 车辆配置的停车场及相关信息 ------------//
    /** 车辆配置-CheLiangPeiZhi 字典，ZW(早晚)，FS(复驶)，BSY(不使用) */
    private String pzType;
    /** 上行出场里程 */
    private Double upOutLc;
    /** 上行出场时间 */
    private Double upOutSj;
    /** 下行出场里程 */
    private Double downOutLc;
    /** 下行出场时间 */
    private Double downOutSj;
    /** 上行进场里程 */
    private Double upInLc;
    /** 上行进场时间 */
    private Double upInSj;
    /** 下行进场里程 */
    private Double downInLc;
    /** 下行进场时间 */
    private Double downInSj;

    public CarConfigInfo() {}
    public CarConfigInfo(Object id, Object xlid, Object xlname, Object clid) {
        if (id != null) {
            this.id = Long.parseLong(id.toString());
        }
        if (xlid != null && xlname != null) {
            Line line = new Line();
            line.setId(Integer.valueOf(xlid.toString()));
            line.setName(xlname.toString());
            this.xl = line;
        }
        if (clid != null) {
            Cars cars = new Cars();
            cars.setId(Integer.valueOf(clid.toString()));
            this.cl = cars;
        }

    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Line getXl() {
        return xl;
    }

    public void setXl(Line xl) {
        this.xl = xl;
    }

    public Cars getCl() {
        return cl;
    }

    public void setCl(Cars cl) {
        this.cl = cl;
    }

    public String getZbsj() {
        return zbsj;
    }

    public void setZbsj(String zbsj) {
        this.zbsj = zbsj;
    }

    public String getMbsj() {
        return mbsj;
    }

    public void setMbsj(String mbsj) {
        this.mbsj = mbsj;
    }

    public Date getQyrq() {
        return qyrq;
    }

    public void setQyrq(Date qyrq) {
        this.qyrq = qyrq;
    }

    public Date getZzrq() {
        return zzrq;
    }

    public void setZzrq(Date zzrq) {
        this.zzrq = zzrq;
    }

    public String getTcd() {
        return tcd;
    }

    public void setTcd(String tcd) {
        this.tcd = tcd;
    }

    public int getIsSwitch() {
        return isSwitch;
    }

    public void setIsSwitch(int isSwitch) {
        this.isSwitch = isSwitch;
    }

    public Boolean getIsCancel() {
        return isCancel;
    }

    public void setIsCancel(Boolean isCancel) {
        this.isCancel = isCancel;
    }

    public String getPzType() {
        return pzType;
    }

    public void setPzType(String pzType) {
        this.pzType = pzType;
    }

    public Double getUpOutLc() {
        return upOutLc;
    }

    public void setUpOutLc(Double upOutLc) {
        this.upOutLc = upOutLc;
    }

    public Double getUpOutSj() {
        return upOutSj;
    }

    public void setUpOutSj(Double upOutSj) {
        this.upOutSj = upOutSj;
    }

    public Double getDownOutLc() {
        return downOutLc;
    }

    public void setDownOutLc(Double downOutLc) {
        this.downOutLc = downOutLc;
    }

    public Double getDownOutSj() {
        return downOutSj;
    }

    public void setDownOutSj(Double downOutSj) {
        this.downOutSj = downOutSj;
    }

    public Double getUpInLc() {
        return upInLc;
    }

    public void setUpInLc(Double upInLc) {
        this.upInLc = upInLc;
    }

    public Double getUpInSj() {
        return upInSj;
    }

    public void setUpInSj(Double upInSj) {
        this.upInSj = upInSj;
    }

    public Double getDownInLc() {
        return downInLc;
    }

    public void setDownInLc(Double downInLc) {
        this.downInLc = downInLc;
    }

    public Double getDownInSj() {
        return downInSj;
    }

    public void setDownInSj(Double downInSj) {
        this.downInSj = downInSj;
    }

    public CarPark getTcc() {
        return tcc;
    }

    public void setTcc(CarPark tcc) {
        this.tcc = tcc;
    }
}
